home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / os2 / pccts.zip / PARSER.DLG < prev    next >
Text File  |  1992-12-08  |  3KB  |  240 lines

  1. <<
  2. /* parser.dlg -- DLG Description of scanner
  3.  *
  4.  * Generated from: dlg_p.g
  5.  *
  6.  * Terence Parr, Hank Dietz and Will Cohen: 1989-1992
  7.  * Purdue University Electrical Engineering
  8.  * ANTLR Version 1.06
  9.  */
  10. #include <stdio.h>
  11. #include <ctype.h>
  12. #include "dlg.h"
  13. #ifdef MEMCHK
  14. #include "trax.h"
  15. #else
  16. extern char *malloc();
  17. extern char *calloc();
  18. #endif
  19. #include "antlr.h"
  20. #include "tokens.h"
  21. #include "dlgdef.h"
  22. LOOKAHEAD
  23. void zzerraction()
  24. {
  25.     (*zzerr)("invalid token");
  26.     zzadvance();
  27.     zzskip();
  28. }
  29. >>
  30.  
  31. <<
  32. #include "dlgdef.h"
  33. int    func_action;        /* should actions be turned into functions?*/
  34. int    lex_mode_counter = 0;    /* keeps track of the number of %%names */
  35. >>
  36.  
  37. %%START
  38.  
  39. @
  40.     <<
  41.         NLA = 1;
  42.     >>
  43.  
  44. [\r\t\ ]+
  45.     <<
  46.         NLA = 2;
  47.         zzskip();   
  48.     >>
  49.  
  50. [\n]
  51.     <<
  52.         NLA = 3;
  53.         zzline++; zzskip();   
  54.     >>
  55.  
  56. \@
  57.     <<
  58.         NLA = L_EOF;
  59.     >>
  60.  
  61. \%\%
  62.     <<
  63.         NLA = PER_PER;
  64.     >>
  65.  
  66. \%\%[a-zA-Z_][a-zA-Z0-9_]*
  67.     <<
  68.         NLA = NAME_PER_PER;
  69.         p_mode_def(&zzlextext[2],lex_mode_counter++);   
  70.     >>
  71.  
  72. \<\<
  73.     <<
  74.         NLA = ACTION;
  75.         if (func_action)
  76.         fprintf(OUT,"static void\nact%d()\n{ ", ++action_no);
  77.         zzmode(ACT); zzskip();
  78.     >>
  79.  
  80. \>\>
  81.     <<
  82.         NLA = GREAT_GREAT;
  83.     >>
  84.  
  85. \{
  86.     <<
  87.         NLA = L_BRACE;
  88.     >>
  89.  
  90. \}
  91.     <<
  92.         NLA = R_BRACE;
  93.     >>
  94.  
  95. \(
  96.     <<
  97.         NLA = L_PAR;
  98.     >>
  99.  
  100. \)
  101.     <<
  102.         NLA = R_PAR;
  103.     >>
  104.  
  105. \[
  106.     <<
  107.         NLA = L_BRACK;
  108.     >>
  109.  
  110. \]
  111.     <<
  112.         NLA = R_BRACK;
  113.     >>
  114.  
  115. \*
  116.     <<
  117.         NLA = ZERO_MORE;
  118.     >>
  119.  
  120. \+
  121.     <<
  122.         NLA = ONE_MORE;
  123.     >>
  124.  
  125. \|
  126.     <<
  127.         NLA = OR;
  128.     >>
  129.  
  130. \-
  131.     <<
  132.         NLA = RANGE;
  133.     >>
  134.  
  135. \~
  136.     <<
  137.         NLA = NOT;
  138.     >>
  139.  
  140. \\0[0-7]*
  141.     <<
  142.         NLA = OCTAL_VALUE;
  143.         {int t; sscanf(&zzlextext[1],"%o",&t); zzlextext[0] = t;}  
  144.     >>
  145.  
  146. \\0[Xx][0-9a-fA-F]+
  147.     <<
  148.         NLA = HEX_VALUE;
  149.         {int t; sscanf(&zzlextext[1],"%x",&t); zzlextext[0] = t;}  
  150.     >>
  151.  
  152. \\[1-9][0-9]*
  153.     <<
  154.         NLA = DEC_VALUE;
  155.         {int t; sscanf(&zzlextext[1],"%d",&t); zzlextext[0] = t;}  
  156.     >>
  157.  
  158. \\t
  159.     <<
  160.         NLA = TAB;
  161.         zzlextext[0] = '\t';  
  162.     >>
  163.  
  164. \\n
  165.     <<
  166.         NLA = NL;
  167.         zzlextext[0] = '\n';  
  168.     >>
  169.  
  170. \\r
  171.     <<
  172.         NLA = CR;
  173.         zzlextext[0] = '\r';  
  174.     >>
  175.  
  176. \\b
  177.     <<
  178.         NLA = BS;
  179.         zzlextext[0] = '\b';  
  180.     >>
  181.  
  182. \\~[tnrb]
  183.     <<
  184.         NLA = LIT;
  185.         zzlextext[0] = zzlextext[1];  
  186.     >>
  187.  
  188. ~[\\]
  189.     <<
  190.         NLA = REGCHAR;
  191.     >>
  192.  
  193.  
  194. %%ACT
  195.  
  196. @
  197.     <<
  198.         NLA = 1;
  199.         error("unterminated action", zzline); zzmode(START);   
  200.     >>
  201.  
  202. \>\>
  203.     <<
  204.         NLA = ACTION;
  205.         if (func_action) fprintf(OUT,"}\n\n");
  206.         zzmode(START);
  207.     >>
  208.  
  209. \>
  210.     <<
  211.         NLA = 29;
  212.         putc(zzlextext[0], OUT); zzskip();   
  213.     >>
  214.  
  215. \\\>
  216.     <<
  217.         NLA = 30;
  218.         putc('>', OUT); zzskip();   
  219.     >>
  220.  
  221. \\
  222.     <<
  223.         NLA = 31;
  224.         putc('\\', OUT); zzskip();   
  225.     >>
  226.  
  227. \n
  228.     <<
  229.         NLA = 32;
  230.         putc(zzlextext[0], OUT); ++zzline; zzskip();   
  231.     >>
  232.  
  233. ~[\>\\@\n]+
  234.     <<
  235.         NLA = 33;
  236.         fprintf(OUT, "%s", &(zzlextext[0])); zzskip();   
  237.     >>
  238.  
  239. %%
  240.